// 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。

// 使用hash，时间复杂O(n)
// 滑动窗口

#include<bits/stdc++.h>
using namespace std;

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.size()<2){
            return s.size();
        }
        unordered_map<char,int> hash;
        int res =0;
        int temp=0;
        int left=0,right=0;
        while(left<s.size()){
            while(right<s.size() &&hash[s[right]]==0){
                ++hash[s[right]];
                ++right;
                ++temp;
            }
            res = max(res,temp);
            while(left<right && s[left]!=s[right]){
                --hash[s[left]];
                ++left;
                --temp;
            }
            ++left;
            ++right;
        }
        return res;
    }
};